#ifndef PRUEBAFINAL_H_
#define PRUEBAFINAL_H_

#include "../RecursoAlmacenamiento.h"
#include "../FabricaRecursos.h"
#include "ClaveAlumno.h"
#include "Alumno.h"

using namespace Toolkit;

void pruebaFinalFinalReHeavyReJodida()
{
	TipoSerializacion tSerializacion = BINARIO;

	RecursoAlmacenamiento *recurso =
			FabricaRecursos::instancia().recursoArchivo("", "pruebaRecurso",
					Toolkit::A_BLOQUES, 200, Toolkit::HASHING_EXTENSIBLE);
	/***************************************************************
	 * Agrego
	 ***************************************************************/

	Toolkit::Alumno leandro(88240, 33115999, "Leandro Romero", tSerializacion);
	recurso->guardarDato(leandro, Toolkit::ClaveAlumno(leandro.getPadron(),
			tSerializacion));

	Toolkit::Alumno facundo(87712, 33115999, "Facundo Olano Jr.",
			tSerializacion);
	recurso->guardarDato(facundo, Toolkit::ClaveAlumno(facundo.getPadron(),
			tSerializacion));

	Toolkit::Alumno dupont(55555, 33115999, "Marcel Dupont", tSerializacion);
	recurso->guardarDato(dupont, Toolkit::ClaveAlumno(dupont.getPadron(),
			tSerializacion));

	Toolkit::Alumno artigas(11111, 33115999, "Pepe Artigas", tSerializacion);
	recurso->guardarDato(artigas, Toolkit::ClaveAlumno(artigas.getPadron(),
			tSerializacion));

	Toolkit::Alumno iorio(88712, 33115999, "Ricardo de la Concepción Iorio",
			tSerializacion);
	recurso->guardarDato(iorio, Toolkit::ClaveAlumno(iorio.getPadron(),
			tSerializacion));

	Toolkit::Alumno carolo(33333, 33115999, "Carolo Bazofio", tSerializacion);
	recurso->guardarDato(carolo, Toolkit::ClaveAlumno(carolo.getPadron(),
			tSerializacion));

	Toolkit::Alumno pelotudo(22222, 33115999, "Juan Carlos Pelotudo",
			tSerializacion);
	recurso->guardarDato(pelotudo, Toolkit::ClaveAlumno(pelotudo.getPadron(),
			tSerializacion));

	/***************************************************************
	 * Elimino :P
	 ***************************************************************/
	recurso->eliminarDato(Toolkit::ClaveAlumno(facundo.getPadron(),
			tSerializacion), facundo);
	recurso->eliminarDato(Toolkit::ClaveAlumno(leandro.getPadron(),
			tSerializacion), leandro);

	Toolkit::Alumno ricardoP(13133, 33115999, "Ricardo P", tSerializacion);
	recurso->guardarDato(ricardoP, Toolkit::ClaveAlumno(ricardoP.getPadron(),
			tSerializacion));

	recurso->eliminarDato(ClaveAlumno(dupont.getPadron(), tSerializacion), dupont);
	recurso->eliminarDato(ClaveAlumno(artigas.getPadron(), tSerializacion), artigas);
	recurso->eliminarDato(ClaveAlumno(iorio.getPadron(), tSerializacion), iorio);
/*
 * si se elimina el ultimo elemento de un bloque, no se llena con ####,
 * pero si se actualiza la lista de nul.
 */

	recurso->guardarDato(artigas, Toolkit::ClaveAlumno(artigas.getPadron(),
				tSerializacion));
	recurso->guardarDato(iorio, Toolkit::ClaveAlumno(iorio.getPadron(),
					tSerializacion));
	recurso->guardarDato(dupont, Toolkit::ClaveAlumno(dupont.getPadron(),
					tSerializacion));

	Alumno aux(0, 0, "", tSerializacion);

	bool lalala = recurso->recuperarDato(Toolkit::ClaveAlumno(
			iorio.getPadron(), tSerializacion), aux);
	cout << "dato leído, nombre: " << aux.getNombre() << " padron: "
			<< aux.getPadron() << endl;

	cout << endl << "lala vale: " << lalala << endl;

	delete recurso;

}

#endif /* PRUEBAFINAL_H_ */
